import type { AxiosResponse } from 'axios'
import type { Res } from '/@/tool/Res'
import type { Param } from '/@/tool/Param'

import coreTool from '/@/tool/coreTool'
import coreAxios from '/@/tool/coreAxios'
import type { DataExportAO } from '/@/model/cn/core/tool/ao/DataExportAO'

import type { TaskParam } from '/@/model/cn/core/kpis/eo/TaskParam'
import type { TaskParamQO } from '/@/model/cn/core/kpis/qo/TaskParamQO'
import type { TaskParamVO } from '/@/model/cn/core/kpis/vo/TaskParamVO'

const url: string = 'kpis/taskParam'

/**
 * 任务参数 REST API
 */
export default {
  /**
   * 任务参数 >>> 保存
   * param 参数
   */
  save(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.save}`, param)
  },
  /**
   * 任务参数 >>> 批量保存
   * param 参数
   */
  saveBatch(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.saveBatch}`, param)
  },
  /**
   * 任务参数 >>> 修改
   * param 参数
   */
  update(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.update}`, param)
  },
  /**
   * 任务参数 >>> 批量修改
   * param 参数
   */
  updateBatch(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.updateBatch}`, param)
  },
  /**
   * 任务参数 >>> 删除
   * param 参数
   */
  remove(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.remove}`, param)
  },
  /**
   * 任务参数 >>> 批量删除
   * param 参数
   */
  removeBatch(param: Param<TaskParam>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.removeBatch}`, param)
  },
  /**
   * 任务参数 >>> 数据量
   * param 参数
   */
  count(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.count}`, param)
  },
  /**
   * 任务参数 >>> 主键查询
   * param 参数
   */
  pk(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.pk}`, param)
  },
  /**
   * 任务参数 >>> 查询
   * param 参数
   */
  query(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.query}`, param)
  },
  /**
   * 任务参数 >>> 分页
   * param 分页参数
   */
  paging(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.paging}`, param)
  },
  /**
   * 任务参数 >>> 业务数据量
   * param 参数
   */
  countVo(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParamVO>>> {
    return coreAxios.post<Res<TaskParamVO>>(`${url}${coreTool.countVo}`, param)
  },
  /**
   * 任务参数 >>> 业务主键查询
   * param 参数
   */
  pkVo(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParamVO>>> {
    return coreAxios.post<Res<TaskParamVO>>(`${url}${coreTool.pkVo}`, param)
  },
  /**
   * 任务参数 >>> 业务查询
   * param 参数
   */
  queryVo(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParamVO>>> {
    return coreAxios.post<Res<TaskParamVO>>(`${url}${coreTool.queryVo}`, param)
  },
  /**
   * 任务参数 >>> 业务分页
   * param 分页参数
   */
  pagingVo(param: Param<TaskParamQO>): Promise<AxiosResponse<Res<TaskParamVO>>> {
    return coreAxios.post<Res<TaskParamVO>>(`${url}${coreTool.pagingVo}`, param)
  },
  /**
   * 任务参数 >>> 数据导入
   * param 参数
   */
  dataImport(param: Param<string>): Promise<AxiosResponse<Res<TaskParam>>> {
    return coreAxios.post<Res<TaskParam>>(`${url}${coreTool.dataImport}`, param)
  },
  /**
   * 任务参数 >>> 数据导出
   * param 参数
   */
  dataExport(param: Param<DataExportAO<TaskParamQO>>): Promise<AxiosResponse<Res<string>>> {
    return coreAxios.post<Res<string>>(`${url}${coreTool.dataExport}`, param)
  },
}
